package com.car.loan.common;

import java.util.stream.Stream;

/**
 * @author huangding
 * @description
 * @date 2019/11/5 14:44
 */
@FunctionalInterface
public interface Recursion<T> {


    /**
     * 计算
     */
    Recursion<T> compute();

    /**
     * 用于结束无线流标志
     */
    default boolean isFinish() {
        return false;
    }

    /**
     * 执行结果返回
     */
    default T result() {
        throw new UnsupportedOperationException("未实现的方法");
    }

    default T invoke() {
        //创建无线流
        return Stream.iterate(this, Recursion::compute)
            .filter(Recursion::isFinish).findFirst().map(Recursion::result).orElse(null);
    }


}
